/**
 * @file   Ufo.java
 * @author Enrique Madrid <emadridm@gmail.com>
 * @date   Mon Jul 16 18:31:27 2007
 *
 * @brief 
 *
 */

package com.myt.matp.core;

import com.myt.matp.MATlet;

import java.util.*;

public final class Worker extends Ufo {

    public static final int MSG_EXEC = MSG_USER + 1;
    public static final int MSG_TASK = MSG_USER + 2;

    private Module m_Module = null;
    private Msg param = new Msg();

    public Worker(MATlet m) {
	super(m);
    }

    public Module getCurrentModule() {
	return m_Module;
    }

    protected void run(final Msg msg) {

        //#ifdef DEBUG_WORKER
        //# System.out.println(getClass().getName() + ".run(Msg) ENTERED");
        //#endif

	switch (msg.getId()) {
	case MSG_EXEC:
	    m_Module = (Module)msg.getObject();
	    break;
	case MSG_TASK:
	    m_Module.work((Msg)msg.getObject());
	    break;
	default:
	    break;
	}

        //#ifdef DEBUG_WORKER
        //# System.out.println(getClass().getName() + ".run(Msg) EXITING");
        //#endif
    }

    protected boolean isWorking() {
        return (m_Status == this.STATUS_RUNING);
    }

    public void postMsgExec(Module m) {
	Msg msg = createMessage(this.MSG_EXEC);
	msg.setObject(m);
	postMessage(msg);
    }

    public void postMsgTask(int task) {
	Msg msg = createMessage(this.MSG_TASK);
	param.set(null);
	param.setWParam(task);
	msg.setObject(param);
	postMessage(msg);
    }
}
